home *** CD-ROM | disk | FTP | other *** search
/ Steal This CD / steal_this_cd.iso / Chapter 07 - Where the Hackers Are / virc200.exe / {app} / Scripts / winamp.vsc < prev   
Text File  |  2003-05-16  |  14KB  |  495 lines

  1. // Winamp control for ViRC 2.0pre11
  2. // Jesse McGrew (Mr2001) <jmcgrew@hansprestige.com>
  3. //
  4. // Changes for pre11:
  5. // Added Winamp control toolbar with song display. Edit the configuration
  6. // section of this file to alter the appearance of the toolbar.
  7. // Clicking on a prev, play, pause, stop, or next button while holding
  8. // the control or shift key will have the same effect as control- or shift-
  9. // clicking in Winamp.
  10.  
  11. // To use this script, add it to the "add-on scripts" list in ViRC's
  12. // configuration.
  13.  
  14. // You must have Winamp running before using these commands:
  15. //   /z - announce current song title, position, and quality
  16. //   /zv - announce winamp version, client version, and winamp.vsc version
  17. //   /zp - go to previous song in playlist
  18. //   /zn - go to next song in playlist
  19. //   /zz - pause/unpause
  20. //   /zj - play/restart
  21. //   /zk - stop
  22. //   /zl - load
  23. //   /zlu - load URL
  24. //   /zld - load directory
  25.  
  26. //-------------------------------------------------------------------
  27. // CONFIGURATION:
  28.  
  29. // $WA_TB_Enabled - Show the Winamp toolbar? (0/1)
  30. @ $WA_TB_Enabled = 1
  31.  
  32. // $WA_TB_WinTypes - Show the toolbar for these window types:
  33. // (virc,servers,channels,queries,chats,whiteboards)
  34. @ $WA_TB_WinTypes = virc
  35.  
  36. // $WA_TB_Buttons - Show these items in the toolbar:
  37. // (prev play pause stop next load saysong sayversion timedisplay songdisplay)
  38. @ $WA_TB_Buttons = prev play pause stop next load timedisplay songdisplay
  39.  
  40. // $WA_TB_TimeDisplayType - Show time display in this format:
  41. //   1 - track elapsed time
  42. //   2 - track remaining time
  43. @ $WA_TB_TimeDisplayType = 1
  44.  
  45. // $WA_TB_SongDisplayType - Show song display in this format:
  46. //   1 - artist
  47. //   2 - title
  48. //   3 - artist - title
  49. //   4 - title - artist
  50. @ $WA_TB_SongDisplayType = 3
  51.  
  52. //-------------------------------------------------------------------
  53. // API constants: converted from Nullsoft's FRONTEND.H
  54. // (see http://www.winamp.com/nsdn/winamp2x/dev/sdk/FRONTEND.H)
  55.  
  56. @ $WM_COMMAND = 273
  57. @ $WM_COPYDATA = 74
  58.  
  59. // WM_WA_IPC messages
  60. @ $WM_WA_IPC = 1024
  61.  
  62. @ $IPC_GETVERSION = 0
  63. @ $IPC_DELETE = 101
  64. @ $IPC_STARTPLAY = 102
  65. @ $IPC_ISPLAYING = 104
  66. @ $IPC_GETOUTPUTTIME = 105
  67. @ $IPC_JUMPTOTIME = 106
  68. @ $IPC_WRITEPLAYLIST = 120
  69. @ $IPC_SETPLAYLISTPOS = 121
  70. @ $IPC_SETVOLUME = 122
  71. @ $IPC_SETPANNING = 123
  72. @ $IPC_GETLISTLENGTH = 124
  73. @ $IPC_SETSKIN = 200
  74. @ $IPC_GETSKIN = 201
  75. @ $IPC_EXECPLUG = 202
  76. @ $IPC_GETPLAYLISTFILE = 211
  77. @ $IPC_GETPLAYLISTTITLE = 212
  78. @ $IPC_GETLISTPOS = 125
  79. @ $IPC_GETINFO = 126
  80. @ $IPC_GETEQDATA = 127
  81. @ $IPC_SETEQDATA = 128
  82. @ $IPC_ADDBOOKMARK = 129
  83. @ $IPC_RESTARTWINAMP = 135
  84. @ $IPC_MBOPEN = 241
  85. @ $IPC_INETAVAILABLE = 242
  86. @ $IPC_UPDTITLE = 243
  87. @ $IPC_CHANGECURRENTFILE = 245
  88. @ $IPC_GETMBURL = 246
  89. @ $IPC_REFRESHPLCACHE = 247
  90. @ $IPC_MBBLOCK = 248
  91. @ $IPC_MBOPENREAL = 249
  92. @ $IPC_GET_SHUFFLE = 250
  93. @ $IPC_GET_REPEAT = 251
  94. @ $IPC_SET_SHUFFLE = 252
  95. @ $IPC_SET_REPEAT = 253
  96.  
  97. // WM_COPYDATA messages
  98. @ $IPC_PLAYFILE = 100
  99. @ $IPC_CHDIR = 103
  100.  
  101. // WM_COMMAND messages
  102. @ $WINAMP_OPTIONS_EQ = 40036
  103. @ $WINAMP_OPTIONS_PLEDIT = 40040
  104. @ $WINAMP_VOLUMEUP = 40058
  105. @ $WINAMP_VOLUMEDOWN = 40059
  106. @ $WINAMP_FFWD5S = 40060
  107. @ $WINAMP_REW5S = 40061
  108.  
  109. // prev
  110. @ $WINAMP_BUTTON1 = 40044
  111. // play
  112. @ $WINAMP_BUTTON2 = 40045
  113. // pause
  114. @ $WINAMP_BUTTON3 = 40046
  115. // stop
  116. @ $WINAMP_BUTTON4 = 40047
  117. // next
  118. @ $WINAMP_BUTTON5 = 40048
  119. // shift+prev = scan back
  120. @ $WINAMP_BUTTON1_SHIFT = 40144
  121. // shift+play = open file
  122. @ $WINAMP_BUTTON2_SHIFT = 40145
  123. // shift+pause = no effect
  124. @ $WINAMP_BUTTON3_SHIFT = 40146
  125. // shift+stop = fade out
  126. @ $WINAMP_BUTTON4_SHIFT = 40147
  127. // shift_next = scan forward
  128. @ $WINAMP_BUTTON5_SHIFT = 40148
  129. // ctrl+prev = first
  130. @ $WINAMP_BUTTON1_CTRL = 40154
  131. // ctrl+play = open URL
  132. @ $WINAMP_BUTTON2_CTRL = 40155
  133. // ctrl+pause = no effect
  134. @ $WINAMP_BUTTON3_CTRL = 40156
  135. // ctrl+stop = no effect
  136. @ $WINAMP_BUTTON4_CTRL = 40157
  137. // ctrl+next = last
  138. @ $WINAMP_BUTTON5_CTRL = 40158
  139.  
  140. // eject
  141. @ $WINAMP_FILE_PLAY = 40029
  142. // ctrl+eject
  143. @ $WINAMP_FILE_PLAY_URL = 40185
  144. // shift+eject
  145. @ $WINAMP_FILE_PLAY_DIR = 40187
  146. @ $WINAMP_OPTIONS_PREFS = 40012
  147. @ $WINAMP_OPTIONS_AOT = 40019
  148. @ $WINAMP_HELP_ABOUT = 40041
  149.  
  150. // Functions
  151. Alias WA_GETVERSION
  152.   @l $hwnd = $FindWindow("Winamp v1.x")
  153.   if ($hwnd)
  154.     @l $nver = $SendMessage($hwnd $WM_WA_IPC 0 $IPC_GETVERSION)
  155.     @l $hi = $($nver >> 8)
  156.     @l $lo = $($nver & 255)
  157.     // SDK docs say winamp 2 returns the version as $20yx for version 2.yx,
  158.     // but it seems to return $2y0x...
  159.     @ $fresult = $($hi / 16).$($hi % 16)$($lo % 16)
  160.   endif
  161. EndAlias
  162.  
  163. Alias WA_GETPOSITION
  164.   @l $hwnd = $FindWindow("Winamp v1.x")
  165.   if ($hwnd)
  166.     @l $curms = $SendMessage($hwnd $WM_WA_IPC 0 $IPC_GETOUTPUTTIME)
  167.     @l $cursec = $($curms / 1000)
  168.     @ $fresult = $($cursec / 60):
  169.     if ($cursec % 60 < 10)
  170.       @ $fresult = ${fresult}0$($cursec % 60)
  171.     else
  172.       @ $fresult = $fresult$($cursec % 60)
  173.     endif
  174.     @l $totalsec = $SendMessage($hwnd $WM_WA_IPC 1 $IPC_GETOUTPUTTIME)
  175.     if ($totalsec > 0)
  176.       @ $fresult = $fresult/$($totalsec / 60):
  177.       if ($totalsec % 60 < 10)
  178.         @ $fresult = ${fresult}0$($totalsec % 60)
  179.       else
  180.         @ $fresult = $fresult$($totalsec % 60)
  181.       endif
  182.     endif
  183.   endif
  184. EndAlias
  185.  
  186. Alias WA_GETINFO
  187.   @l $hwnd = $FindWindow("Winamp v1.x")
  188.   if ($hwnd)
  189.     @l $samplerate = $SendMessage($hwnd $WM_WA_IPC 0 $IPC_GETINFO)
  190.     @l $bitrate = $SendMessage($hwnd $WM_WA_IPC 1 $IPC_GETINFO)
  191.     @l $channels = $SendMessage($hwnd $WM_WA_IPC 2 $IPC_GETINFO)
  192.     @ $fresult = $samplerate kHz, $bitrate kbps,
  193.     switch $channels
  194.       case 1:
  195.         @ $fresult = $fresult mono
  196.       case 2:
  197.         @ $fresult = $fresult stereo
  198.       case else
  199.         @ $fresult = $fresult ${channels}ch
  200.     endswitch
  201.   endif
  202. EndAlias
  203.  
  204. Alias WA_GETTITLE
  205.   @l $hwnd = $FindWindow("Winamp v1.x")
  206.   if ($hwnd)
  207.     @l $text = $GetWindowText($hwnd)
  208.     @ $fresult = $strtokrex(". " $strtoklex(" - Winamp" $GetWindowText($hwnd)))
  209.   endif
  210. EndAlias
  211.  
  212. Alias WA_RUNNING
  213.   @l $hwnd = $FindWindow("Winamp v1.x")
  214.   @ $fresult = $($hwnd != 0)
  215. EndAlias
  216.  
  217. // Commands
  218. Alias Z
  219.   if $WA_Running()
  220.     Me is listening to \b[\b$WA_GetTitle()\b]\b at $WA_GetPosition() ($WA_GetInfo())
  221.   endif
  222. EndAlias
  223.  
  224. Alias ZV
  225.   if $WA_Running()
  226.     Me is using Winamp $WA_GetVersion(), ViRC $ver, winamp.vsc 1.00
  227.   endif
  228. EndAlias
  229.  
  230. Alias ZN
  231.   @l $hwnd = $FindWindow("Winamp v1.x")
  232.   if ($hwnd)
  233.     SendMessage $hwnd $WM_COMMAND $WINAMP_BUTTON5 0
  234.   endif
  235.   ^MTimer 100 1 Z
  236. EndAlias
  237.  
  238. Alias ZP
  239.   @l $hwnd = $FindWindow("Winamp v1.x")
  240.   if ($hwnd)
  241.     SendMessage $hwnd $WM_COMMAND $WINAMP_BUTTON1 0
  242.   endif
  243.   ^MTimer 100 1 Z
  244. EndAlias
  245.  
  246. Alias ZZ
  247.   @l $hwnd = $FindWindow("Winamp v1.x")
  248.   if ($hwnd)
  249.     SendMessage $hwnd $WM_COMMAND $WINAMP_BUTTON3 0
  250.   endif
  251. EndAlias
  252.  
  253. Alias ZJ
  254.   @l $hwnd = $FindWindow("Winamp v1.x")
  255.   if ($hwnd)
  256.     SendMessage $hwnd $WM_COMMAND $WINAMP_BUTTON2 0
  257.   endif
  258. EndAlias
  259.  
  260. Alias ZK
  261.   @l $hwnd = $FindWindow("Winamp v1.x")
  262.   if ($hwnd)
  263.     SendMessage $hwnd $WM_COMMAND $WINAMP_BUTTON4 0
  264.   endif
  265. EndAlias
  266.  
  267. Alias ZL
  268.   @l $hwnd = $FindWindow("Winamp v1.x")
  269.   if ($hwnd)
  270.     SendMessage $hwnd $WM_COMMAND $WINAMP_FILE_PLAY 0
  271.   endif
  272. EndAlias
  273.  
  274. Alias ZLU
  275.   @l $hwnd = $FindWindow("Winamp v1.x")
  276.   if ($hwnd)
  277.     SendMessage $hwnd $WM_COMMAND $WINAMP_FILE_PLAY_URL 0
  278.   endif
  279. EndAlias
  280.  
  281. Alias ZLD
  282.   @l $hwnd = $FindWindow("Winamp v1.x")
  283.   if ($hwnd)
  284.     SendMessage $hwnd $WM_COMMAND $WINAMP_FILE_PLAY_DIR 0
  285.   endif
  286. EndAlias
  287.  
  288. // Toolbar
  289.  
  290. if ($WA_TB_Enabled)
  291.   @l $TS = $new(TStringList)
  292.   foreach ($i; $listunique($WA_TB_Buttons))
  293. // (prev play pause stop next load saysong sayversion timedisplay songdisplay)
  294.     switch $i
  295.       case prev:
  296.         $TS.Add T_PREV 0 "tb_wa_prev.bmp" | Previous
  297.       case play:
  298.         $TS.Add T_PLAY 0 "tb_wa_play.bmp" | Play/restart
  299.       case pause:
  300.         $TS.Add T_PAUSE 0 "tb_wa_pause.bmp" | Pause/unpause
  301.       case stop:
  302.         $TS.Add T_STOP 0 "tb_wa_stop.bmp" | Stop
  303.       case next:
  304.         $TS.Add T_NEXT 0 "tb_wa_next.bmp" | Next
  305.       case load:
  306.         $TS.Add T_LOAD 0 "tb_wa_load.bmp" | Load
  307.       case saysong:
  308.         $TS.Add T_SAYSONG 0 Song | Say song name
  309.       case sayversion:
  310.         $TS.Add T_SAYVERSION 0 Ver | Say version information
  311.       case timedisplay:
  312.         $TS.Add T_TIMEDISPLAY 4 | Time display
  313.         OnServer 0 ^MTimer wa_tb_timedisplay 500 0 _wa_tb_timedisplay
  314.       case songdisplay:
  315.         $TS.Add T_SONGDISPLAY 4 | Song display
  316.         OnServer 0 ^Timer wa_tb_songdisplay 3 0 _wa_tb_songdisplay
  317.     endswitch
  318.   endforeach
  319.   $TS.SaveToToolbar TB_WINAMP "Winamp control" for $WA_TB_WinTypes docked top order last
  320.   Destroy $TS
  321. endif
  322.  
  323. Alias _WA_TB_SENDMSG
  324.   // _wa_tb_sendmsg <plain> <shift> <ctrl>
  325.   @l $hwnd = $FindWindow("Winamp v1.x")
  326.   if ($hwnd)
  327.     @l $sk = $ShiftKeys()
  328.     if ($isinset([shift] $sk))
  329.       SendMessage $hwnd $WM_COMMAND $2 0
  330.     else if ($isinset([ctrl] $sk))
  331.       SendMessage $hwnd $WM_COMMAND $3 0
  332.     else
  333.       SendMessage $hwnd $WM_COMMAND $1 0
  334.     endif
  335.   endif
  336. EndAlias
  337.  
  338. ToolbarItem T_PREV on TB_WINAMP
  339.   _wa_tb_sendmsg $WINAMP_BUTTON1 $WINAMP_BUTTON1_SHIFT $WINAMP_BUTTON1_CTRL
  340.   _wa_tb_songdisplay
  341. EndToolbarItem
  342.  
  343. ToolbarItem T_PLAY on TB_WINAMP
  344.   _wa_tb_sendmsg $WINAMP_BUTTON2 $WINAMP_BUTTON2_SHIFT $WINAMP_BUTTON2_CTRL
  345. EndToolbarItem
  346.  
  347. ToolbarItem T_PAUSE on TB_WINAMP
  348.   _wa_tb_sendmsg $WINAMP_BUTTON3 $WINAMP_BUTTON3_SHIFT $WINAMP_BUTTON3_CTRL
  349. EndToolbarItem
  350.  
  351. ToolbarItem T_STOP on TB_WINAMP
  352.   _wa_tb_sendmsg $WINAMP_BUTTON4 $WINAMP_BUTTON4_SHIFT $WINAMP_BUTTON4_CTRL
  353. EndToolbarItem
  354.  
  355. ToolbarItem T_NEXT on TB_WINAMP
  356.   _wa_tb_sendmsg $WINAMP_BUTTON5 $WINAMP_BUTTON5_SHIFT $WINAMP_BUTTON5_CTRL
  357.   _wa_tb_songdisplay
  358. EndToolbarItem
  359.  
  360. ToolbarItem T_LOAD on TB_WINAMP
  361.   _wa_tb_sendmsg $WINAMP_FILE_PLAY $WINAMP_FILE_PLAY_DIR $WINAMP_FILE_PLAY_URL
  362. EndToolbarItem
  363.  
  364. ToolbarItem T_SAYSONG on TB_WINAMP
  365.   Z
  366. EndToolbarItem
  367.  
  368. ToolbarItem T_SAYVERSION on TB_WINAMP
  369.   ZV
  370. EndToolbarItem
  371.  
  372. Event <OnCreateWindow_winamp_tb> "*"
  373.   @l $obj = $maptoolbar($1:TB_WINAMP)
  374.   Halt if $obj == -1
  375.   UnmapObject $obj
  376.   
  377.   // time display
  378.   @l $obj = $maptoolbar($1:TB_WINAMP:T_TIMEDISPLAY)
  379.   if ($obj != -1)
  380.     @p $obj.Width = 40
  381.     @p $obj.ReadOnly = True
  382.     UnmapObject $obj
  383.   endif
  384.   
  385.   // song display
  386.   @l $obj = $maptoolbar($1:TB_WINAMP:T_SONGDISPLAY)
  387.   if ($obj != -1)
  388.     @p $obj.Width = 250
  389.     @p $obj.ReadOnly = True
  390.     UnmapObject $obj
  391.   endif
  392. EndEvent
  393.  
  394. Event <OnStart_winamp_tb> "*"
  395.   FireEvent <OnCreateWindow_winamp_tb> TMainForm !Main
  396. EndEvent
  397.  
  398. Alias _WA_TB_TIMEDISPLAY
  399.   if ([$1] == [])
  400.     // loop over servers, dcc chats, and whiteboards
  401.     @l $hwnd = $FindWindow("Winamp v1.x")
  402.     if ($hwnd)
  403.       @l $curms = $SendMessage($hwnd $WM_WA_IPC 0 $IPC_GETOUTPUTTIME)
  404.       if ($WA_TB_TimeDisplayType == 2)
  405.         // remaining time
  406.         @l $totalms = $SendMessage($hwnd $WM_WA_IPC 1 $IPC_GETOUTPUTTIME)
  407.         @l $dispms = $($totalms - $curms)
  408.       else
  409.         @l $dispms = $curms
  410.       endif
  411.       @l $sec = $($dispms / 1000)
  412.       @l $min = $($sec / 60)
  413.       @l $sec = $($sec % 60)
  414.       if ($sec < 10)
  415.         @l $sec = 0$sec
  416.       endif
  417.       
  418.       if ($WA_TB_TimeDisplayTime == 2)
  419.         // remaining time
  420.         @l $time = -$min:$sec
  421.       else
  422.         @l $time = $min:$sec
  423.       endif
  424.     else
  425.       @l $time = ?
  426.     endif
  427.     
  428.     // update main form
  429.     SetToolbar !Main:TB_WINAMP T_TIMEDISPLAY.Caption = $time
  430.     
  431.     // loop over servers
  432.     @l $cnt = $listelementcount($serverlist())
  433.     for (@l $i = 1; $i < $cnt; $i++)
  434.       OnServer $i _wa_tb_timedisplay $time
  435.     endfor
  436.     
  437.     // loop over dcc chats and whiteboards
  438.     foreach ($i; $dccchatlist())
  439.       SetToolbar $i:TB_WINAMP T_TIMEDISPLAY.Caption = $time
  440.     endforeach
  441.     foreach ($i; $whiteboardlist())
  442.       SetToolbar $i:TB_WINAMP T_TIMEDISPLAY.Caption = $time
  443.     endforeach
  444.   else
  445.     // update server
  446.     SetToolbar .:TB_WINAMP T_TIMEDISPLAY.Caption = $1
  447.     
  448.     // loop over channels and queries
  449.     foreach ($i; $channellist())
  450.       SetToolbar $i:TB_WINAMP T_TIMEDISPLAY.Caption = $1
  451.     endforeach
  452.     foreach ($i; $querylist())
  453.       SetToolbar $i:TB_WINAMP T_TIMEDISPLAY.Caption = $1
  454.     endforeach
  455.   endif
  456. EndAlias
  457.  
  458. Alias _WA_TB_SONGDISPLAY
  459.   if ([$1-] == [])
  460.     // loop over servers, dcc chats, and whiteboards
  461.     @l $title = $WA_GetTitle()
  462.     if ([$title] == []) || ([$title] == [<no value>])
  463.       @l $title = ?
  464.     endif
  465.     
  466.     // update main form
  467.     SetToolbar !Main:TB_WINAMP T_SONGDISPLAY.Caption = $title
  468.     
  469.     // loop over servers
  470.     @l $cnt = $listelementcount($serverlist())
  471.     for (@l $i = 1; $i < $cnt; $i++)
  472.       OnServer $i _wa_tb_songdisplay $title
  473.     endfor
  474.     
  475.     // loop over dcc chats and whiteboards
  476.     foreach ($i; $dccchatlist())
  477.       SetToolbar $i:TB_WINAMP T_SONGDISPLAY.Caption = $title
  478.     endforeach
  479.     foreach ($i; $whiteboardlist())
  480.       SetToolbar $i:TB_WINAMP T_SONGDISPLAY.Caption = $title
  481.     endforeach
  482.   else
  483.     // update server
  484.     SetToolbar .:TB_WINAMP T_SONGDISPLAY.Caption = $1-
  485.     
  486.     // loop over channels and queries
  487.     foreach ($i; $channellist())
  488.       SetToolbar $i:TB_WINAMP T_SONGDISPLAY.Caption = $1-
  489.     endforeach
  490.     foreach ($i; $querylist())
  491.       SetToolbar $i:TB_WINAMP T_SONGDISPLAY.Caption = $1-
  492.     endforeach
  493.   endif
  494. EndAlias
  495.